package it.patterns.behavioral.command;

/**
 * Encapsulate a request as an object, thereby letting you parameterize clients
 * with different requests, queue or log requests, and support undoable
 * operations.
 * 
 * Use the command pattern when you want to:
 * <ul>
 * <li>parameterize objects by an action to perform (like menu items, ...)</li>
 * <li>specify, queue, and execute requests at different times</li>
 * <li>support undo: the concrete command can store state for reverseing its
 * effects</li>
 * <li>support logging of operations</li>
 * </ul>
 * 
 * You can assemble commands into a composite command using Composite pattern.
 * It's easy to add new commands because you don't have to change existing
 * classes.
 * 
 * <img src="Command.jpg" alt="Pattern Structure"/>
 * 
 * @author Luca D'Onofrio
 * 
 * @category Behavioral Pattern
 * @see "Design Patterns - Element of Reusable Object Oriented Software (Gamma,Helm, Johnson, Vlissides)"
 * 
 * @version 1.0
 * 
 */
public interface Command {
	public void execute();
}
